//  进行 axios 二次封装：使用请求与响应拦截器

import axios, { AxiosResponse, AxiosError } from "axios";
import { ElMessage } from "element-plus";
import { GET_TOKEN } from "./token";


//  创建 axios 实例
const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000, //  请求超时时间
});
//  请求拦截器
service.interceptors.request.use(
  (config) => {
    // config.headers.token = localStorage.getItem('token')
    config.headers.token = GET_TOKEN()
    //  config配置对象，headers属性请求头，经常给服务器端携带公共参数
    //  返回配置信息
    return config;
  }
);
//  响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    return response.data;
  },
  (error: AxiosError) => {
    //  失败回调：处理http错误状态码
    // 定义一个变量：存储网络错误信息
    let message = '';
    //  http状态码
    let status = error.response?.status;

    switch (status) {
      case 401:
        message = 'token过期';
        break;
      case 403:
        message = '无权访问';
        break;
      case 404:
        message = '请求地址错误';
        break;
      case 500:
        message = '服务器出错';
        break;
      default:
        message = '网络出错';
    }
    ElMessage.error(message);
    return Promise.reject(error);
  })
export default service; //  导出 service